#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <unistd.h>
#include <pthread.h>

using namespace std;

string changeid(const pthread_t &thread_id)
{
    char tid[128];

    snprintf(tid, sizeof(tid), "0x%x", thread_id);

    return tid;
}

void *start_routine(void *args)
{
    string threadname = static_cast<const char *>(args);

    //pthread_detach(pthread_self());//设置自己为分离状态

    int cnt = 5;

    while (cnt--)
    {
        cout << threadname << " running... " << changeid(pthread_self()) << endl;
        sleep(1);
    }

    return nullptr;
}

int main()
{

    pthread_t tid;

    pthread_create(&tid, nullptr, start_routine, (void *)"thread 1");

    string main_id = changeid(pthread_self());

    pthread_detach(tid);//主线程分离新线程

    //sleep(2);

    //int n = pthread_join(tid, nullptr);

    //cout << "result: "<< n << " : "<<strerror(n) <<endl;

    // while(1)
    // {
    //     cout << "main running... new thread id: " << changeid(tid) << " main thread id: "<< main_id << endl;
    //     sleep(1);
    // }

    cout << "main running... new thread id: " << changeid(tid) << " main thread id: "<< main_id << endl;

    pthread_join(tid,nullptr);

    return 0;
}




// #include <iostream>
// #include <cstdio>
// #include <string>
// #include <cstring>
// #include <unistd.h>
// #include <pthread.h>

// using namespace std;

// string changeid(const pthread_t &thread_id)
// {
//     char tid[128];

//     snprintf(tid, sizeof(tid), "0x%x", thread_id);
    
//     return tid;
// }

// void *start_routine(void *args)
// {
//     string threadname = static_cast<const char *>(args);

//     //pthread_detach(pthread_self());//设置自己为分离状态

//     int cnt = 5;

//     while (cnt--)
//     {
//         cout << threadname << " running... " << changeid(pthread_self()) << endl;
//         sleep(1);
//     }

//     return nullptr;
// }

// int main()
// {

//     pthread_t tid;

//     pthread_create(&tid, nullptr, start_routine, (void *)"thread 1");

//     string main_id = changeid(pthread_self());

//     pthread_detach(tid);//主线程分离新线程

//     //sleep(2);

//     //int n = pthread_join(tid, nullptr);

//     //cout << "result: "<< n << " : "<<strerror(n) <<endl;

//     while(1)
//     {
//         cout << "main running... new thread id: " << changeid(tid) << " main thread id: "<< main_id << endl;
//         sleep(1);
//     }

//     return 0;
// }